home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / pmake / kernel.mk < prev    next >
Text File  |  1992-11-27  |  10KB  |  381 lines

  1. #
  2. # This is a library Makefile that is included by the Makefile's for
  3. # modules of the Sprite kernel.  The file that includes this one should
  4. # already have defined the following variables:
  5. # Variables:
  6. #    NAME        module name
  7. #    SRCS        all sources for the module for the current target
  8. #            machine
  9. #    ALLSRCS        all sources for the module, including all sources
  10. #            for all target machines
  11. #    ALLHDRS        all headers for the module
  12. #    OBJS        object files from which to create the module
  13. #    CLEANOBJS    object files to be removed as part of "make clean"
  14. #            (need not just be object files)
  15. #    HDRS        all header files for the module
  16. #    PUBHDRS        publicly-available headers for the module (this
  17. #            contains only machine-independent headers)
  18. #    MDPUBHDRS    machine-dependent public headers for the module
  19. #            (for the current TM)
  20. #    TM        target machine type for object files etc.
  21. #    MACHINES    list of all target machines currently available
  22. #            for this program.
  23. #
  24. # "Make install" installs the source before the object.  This is because
  25. # make depend may get confused and have files depend on Include files rather
  26. # than header files in this directory, and doing an installhdrs after
  27. # making the object files might result in remaking all the object files a
  28. # second time.  
  29. #
  30. # $Header: /sprite/lib/pmake/RCS/kernel.mk,v 1.91 92/11/27 17:17:37 jhh Exp $ SPRITE (Berkeley)
  31. #
  32.  
  33. #
  34. # Default certain variables so that Pmake won't barf during "make newtm"
  35. # operations.
  36. #
  37. CLEANOBJS    ?=
  38. HDRS        ?=
  39. MDPUBHDRS    ?=
  40. OBJS        ?=
  41. SRCS        ?=
  42. INSTFILES    ?=
  43. SACREDOBJS    ?=
  44.  
  45. #
  46. # Important directories.
  47. #
  48. BINDIR        ?= /sprite/cmds.$(MACHINE)
  49. INCLUDEDIR    ?= /sprite/src/kernel/Include
  50. INSTALLDIR    ?= /sprite/src/kernel/Installed/$(NAME)
  51. LIBDIR        ?= /sprite/src/kernel/$(TM).md
  52. LINTDIR        ?= /sprite/src/kernel/Lint/$(TM).md
  53. PROFDIR        ?= /sprite/src/kernel/Profiled/$(TM).md
  54. USERINCLUDEDIR    ?= /sprite/lib/include
  55. SNAPDIR        ?= /sprite/src/kernel/Snapshots
  56.  
  57. CSRCS        ?= $(SRCS:M*.c)
  58. SSRCS        ?= $(SRCS:M*.s)
  59. POBJS        ?= $(OBJS:S/.o$/.po/g)
  60. GOBJS        ?= $(OBJS:S/.o$/.go/g)
  61. ALLCSRCS    ?= $(ALLSRCS:M*.c)
  62. MDHDRS        ?= $(HDRS:M*.md/*)
  63. MDSRCS        ?= $(SRCS:M*.md/*)
  64. MDINSTFILES    ?= $(INSTFILES:M*.md/*)
  65.  
  66. #
  67. # Define search paths for libraries, include files and lint libraries
  68. #
  69. .PATH.a        :
  70. .PATH.h        :
  71. #ifdef FIRSTHDRDIRS
  72. .PATH.h        : $(FIRSTHDRDIRS)
  73. #endif
  74. .PATH.h        : $(TM).md . $(INCLUDEDIR)/$(TM).md $(INCLUDEDIR) \
  75.             $(USERINCLUDEDIR)/$(TM).md $(USERINCLUDEDIR) 
  76. .PATH.ln    : 
  77. #ifdef MYLINTDIR
  78. .PATH.ln    : $(MYLINTDIR)
  79. #endif
  80. .PATH.ln    : $(LINTDIR)
  81. .PATH.c        :
  82. .PATH.c        : $(TM).md
  83. .PATH.s        :
  84. .PATH.s        : $(TM).md
  85.  
  86. #ifdef MYLINTDIR
  87. LINTINSTALLDIR = $(MYLINTDIR)
  88. #else
  89. LINTINSTALLDIR = $(LINTDIR)
  90. #endif 
  91.  
  92. #
  93. # System programs -- assign conditionally so they may be redefined in
  94. # including makefile.
  95. #
  96. AS        ?= $(BINDIR)/as
  97. CC        ?= $(BINDIR)/cc
  98. CP        ?= $(BINDIR)/cp
  99. CPP        ?= $(BINDIR)/cpp -traditional -$
  100. CTAGS        ?= $(BINDIR)/ctags
  101. ETAGS        ?= /emacs/cmds/etags
  102. LD        ?= $(BINDIR)/ld
  103. LINT        ?= $(BINDIR)/lint
  104. MV        ?= $(BINDIR)/mv
  105. MAKEDEPEND    ?= $(BINDIR)/makedepend
  106. MKDIR        ?= $(BINDIR)/mkdir
  107. RDIST        ?= $(BINDIR)/rdist
  108. RM        ?= $(BINDIR)/rm
  109. SCVS        ?= $(BINDIR)/scvs
  110. SED        ?= $(BINDIR)/sed
  111. TEST            ?= $(BINDIR)/test
  112. TOUCH        ?= $(BINDIR)/touch
  113. UPDATE        ?= $(BINDIR)/update
  114.  
  115. #
  116. # Figure out what stuff we'll pass to sub-makes.
  117. #
  118. PASSVARS    = 'INSTALLDIR=$(INSTALLDIR)' $(.MAKEFLAGS)
  119. #ifdef        XCFLAGS
  120. PASSVARS    += 'XCFLAGS=$(XCFLAGS)'
  121. #endif
  122. #ifdef        XAFLAGS
  123. PASSVARS    += 'XAFLAGS=$(XAFLAGS)'
  124. #endif
  125.  
  126. #
  127. # Flags. These are ones that are needed by *all* modules. Any other
  128. # ones should be added with the += operator in the local.mk makefile.
  129. # The FLAGS variables are defined with the += operator in case this file
  130. # is included after the main makefile has already defined them...
  131. #
  132.  
  133. #include    <tm.mk>
  134. CTFLAGS        ?= -wtd
  135. LINTFLAGS    ?= -m$(TM)
  136. LINTFLAGS    += -S -M -n -u -D$(TM)
  137. XCFLAGS        ?=
  138. XAFLAGS        ?=
  139.  
  140. #include <debugflags.mk>
  141.  
  142. # If we're compiling with gcc (i.e., on Suns), ask gcc to give all
  143. # warning messages.
  144.  
  145. #if empty(TM:Mds3100) && empty(TM:Mds5000)
  146. GFLAG += -Wall
  147. #endif
  148.  
  149. CFLAGS        += -DKERNEL $(TMCFLAGS) $(XCFLAGS) 
  150.  
  151. #
  152. # The .INCLUDES variable already includes directories that should be
  153. # used by cc and other programs by default.  Remove them, just so that
  154. # the command lines look cleaner.
  155. #
  156. # Since the dec compiler doesn't include /sprite/lib/include we must leave
  157. # the path as is when TM=ds3100.  Also the mips compiler doesn't include
  158. # /sprite/lib/include either so add these in for both as and cc.
  159. # For the sun4c, there is a problem with user include files pointing at
  160. # kernel include files, since the compiler will cause this sort of reference
  161. # to point at sun4 instead of sun4c, unless we specifically keep the reference
  162. # on the compile line.
  163. #
  164.  
  165. #if !empty(TM:Mds3100) || !empty(TM:Mds5000)
  166. CFLAGS          += $(.INCLUDES)
  167. AFLAGS          += $(.INCLUDES) $(TMAFLAGS) $(XAFLAGS) -DKERNEL
  168. #else if !empty(TM:Msun4c)
  169. CFLAGS          += $(.INCLUDES)
  170. AFLAGS        += $(TMAFLAGS) $(XAFLAGS) 
  171. #else
  172. CFLAGS        += $(.INCLUDES:S|^-I/sprite/lib/include$||g:S|^-I/sprite/lib/include/$(TM).md$||g)
  173. AFLAGS        += $(TMAFLAGS) $(XAFLAGS) 
  174. #endif
  175.  
  176. #
  177. # Floating point coprocessor instructions should not be used
  178. # inside the kernel.
  179. #
  180.  
  181. #if !empty(TM:Msun3) || !empty(TM:Mcleansun3)
  182. CFLAGS          += -msoft-float
  183. #endif
  184.  
  185. #
  186. # Transformation rules: these have special features to place .o files
  187. # in md subdirectories, run preprocessor over .s files, and generate
  188. # .po files for profiling.
  189. #
  190. ##    $(CC) -S $(CFLAGS) -p -DPROFILE $(.IMPSRC)
  191. ##    $(AS) -o $(.TARGET) $(AFLAGS) $(.PREFIX).s
  192. ##    $(RM) -f $(.PREFIX).s
  193.  
  194. .SUFFIXES    : .go .po
  195.  
  196. .c.o        :
  197.     $(RM) -f $(.TARGET)
  198.     $(CC) $(CFLAGS) $(OFLAG) $(GFLAG) -c $(.IMPSRC) -o $(.TARGET)
  199. .c.go        :
  200.     $(RM) -f $(.TARGET)
  201.     $(CC) $(CFLAGS)  $(GDFLAG) -c $(.IMPSRC) -o $(.TARGET)
  202. .c.po        :
  203.     $(RM) -f $(.TARGET)
  204.     $(CC) $(CFLAGS) $(OFLAG) $(GFLAG) -p -DPROFILE -c $(.IMPSRC) -o $(.TARGET)
  205. .s.po .s.o :
  206. #if empty(TM:Mds3100) && empty(TM:Mds5000)
  207.     $(CPP) $(CFLAGS:M-[IDU]*) -m$(TM) -D$(TM) -D_ASM $(.IMPSRC) > $(.PREFIX).pp
  208.     $(AS) -o $(.TARGET) $(AFLAGS) $(AGFLAG) $(.PREFIX).pp
  209.     $(RM) -f $(.PREFIX).pp
  210. #else
  211.     $(RM) -f $(.TARGET)
  212.     $(AS) $(AFLAGS) $(AGFLAG) $(.IMPSRC) -o $(.TARGET)
  213. #endif
  214.  
  215. .s.go :
  216. #if empty(TM:Mds3100) && empty(TM:Mds5000)
  217.     $(CPP) $(CFLAGS:M-[IDU]*) -m$(TM) -D$(TM) -D_ASM $(.IMPSRC) > $(.PREFIX).pp
  218.     $(AS) -o $(.TARGET) $(AFLAGS) $(AGDFLAG) $(.PREFIX).pp
  219.     $(RM) -f $(.PREFIX).pp
  220. #else
  221.     $(RM) -f $(.TARGET)
  222.     $(AS) $(AFLAGS) $(AGDFLAG) $(.IMPSRC) -o $(.TARGET)
  223. #endif
  224.  
  225.  
  226. #
  227. # MAKEDEPEND usage:
  228. #    <dependency-file> : <sources> MAKEDEPEND
  229. #
  230. # Generate dependency file suitable for inclusion in future makes.  Must
  231. # mung the dependency file in two ways:  a) add a .md prefix on all the .o
  232. # file names;  b) for each entry for a .o file, generate an equivalent
  233. # entry for a .po file.
  234.  
  235. MAKEDEPEND    : .USE
  236.     @$(TOUCH) $(DEPFILE)
  237. #if empty(TM:Mds3100)  && empty(TM:Mds5000)
  238.     $(MAKEDEPEND) $(CFLAGS:M-[ID]*) -m $(TM) -w50 -f $(DEPFILE) $(.ALLSRC)
  239. #else
  240.     $(MAKEDEPEND) $(CFLAGS:M-[ID]*:S|^-I/sprite/lib/include$||g:S|^-I/sprite/lib/include/$(TM).md$||g) -m $(TM) -w50 -f $(DEPFILE) $(.ALLSRC)
  241. #endif
  242.     @$(MV) -f $(DEPFILE) $(DEPFILE).tmp
  243.     @$(SED) -e '/^#/!s|^\([^:]*\)\.o[     ]*:|$(TM).md/\1.po $(TM).md/\1.go $(TM).md/&|' <$(DEPFILE).tmp > $(DEPFILE)
  244.     @$(RM) -f $(DEPFILE).tmp
  245.  
  246. #
  247. # Define the main targets.
  248. #
  249.  
  250. $(TM).md/$(NAME).o    : $(OBJS)
  251.     $(RM) -f $(.TARGET)
  252.     $(LD) -r $(LDFLAGS) $(.ALLSRC) -o $(.TARGET)
  253. $(TM).md/$(NAME).go    : $(GOBJS)
  254.     $(RM) -f $(.TARGET)
  255.     $(LD) -r $(LDFLAGS) $(.ALLSRC) -o $(.TARGET)
  256. default            : $(TM).md/$(NAME).o
  257. debug            : $(TM).md/$(NAME).go
  258.  
  259. clean tidy        :: .NOEXPORT
  260.     $(RM) -f $(CLEANOBJS) $(CLEANOBJS:S/.o$/.po/g) \
  261.         $(CLEANOBJS:S/.o$/.go/g) $(TM).md/$(NAME).o \
  262.         $(TM).md/$(NAME).po *~ $(TM).md/*~
  263.  
  264. DEPFILE = $(TM).md/dependencies.mk
  265. depend            : $(DEPFILE)
  266. $(DEPFILE)        ! $(SRCS:M*.c) $(SRCS:M*.s) MAKEDEPEND
  267.  
  268. install            :: installobj installhdrs
  269. #if !empty(TM:Mds3100) || !empty(TM:Mds5000)
  270. install            :: instlint 
  271. #endif
  272.  
  273. installhdrs        ::
  274.     @$(UPDATE) -t -n $(PUBHDRS) $(INCLUDEDIR)
  275. #if !empty(MDPUBHDRS)
  276.     @-$(MKDIR) $(INCLUDEDIR)/$(TM).md > /dev/null 2>&1
  277.     @$(UPDATE) -t -n $(MDPUBHDRS) $(INCLUDEDIR)/$(TM).md
  278. #endif
  279. instlint        :: $(LINTINSTALLDIR)/$(NAME).ln
  280. installobj        :: $(LIBDIR)/$(NAME).o tags TAGS
  281. installdbg        :: $(LIBDIR)/$(NAME).go
  282.  
  283. $(LIBDIR)/$(NAME).o    : $(TM).md/$(NAME).o
  284.     $(UPDATE) -l -n $(TM).md/$(NAME).o $(LIBDIR)
  285. $(LIBDIR)/$(NAME).go    : $(TM).md/$(NAME).go
  286.     $(UPDATE) -l -n $(TM).md/$(NAME).go $(LIBDIR)
  287.  
  288. lint            : $(TM).md/lint
  289. $(TM).md/lint        : $(LINTLIBS) $(CSRCS) 
  290.     $(RM) -f $(.TARGET)
  291.     $(LINT) $(LINTFLAGS) $(CFLAGS:M-[IDU]*) $(.ALLSRC) \
  292.         > $(.TARGET) 2>& 1
  293. $(TM).md/llib-l$(NAME).ln    : $(CSRCS) $(HDRS)
  294.     $(RM) -f $(.TARGET)
  295.     $(RM) -f llib-l$(NAME).ln
  296.     $(LINT) -C$(NAME) $(CFLAGS:M-[IDU]*) $(LINTFLAGS) $(.ALLSRC:M*.c)
  297.     $(MV) llib-l$(NAME).ln $(.TARGET)
  298. $(LINTINSTALLDIR)/$(NAME).ln    : $(TM).md/llib-l$(NAME).ln
  299.     $(RM) -f $(.TARGET)
  300.     $(CP) $(TM).md/llib-l$(NAME).ln $(.TARGET)
  301.  
  302. mkmf            !
  303.     mkmf
  304.  
  305. newtm            ! .SILENT
  306.     if $(TEST) -d $(TM).md; then
  307.         true
  308.     else
  309.         mkdir $(TM).md;
  310.         chmod 775 $(TM).md;
  311.         mkmf -m$(TM)
  312.     fi
  313.  
  314. profile            :: $(TM).md/$(NAME).po
  315. $(TM).md/$(NAME).po    : $(POBJS)
  316.     $(RM) -f $(.TARGET)
  317.     $(LD) -r $(LDFLAGS) $(.ALLSRC) -o $(.TARGET)
  318.  
  319. tags            :: $(ALLCSRCS) $(HDRS)
  320.     $(CTAGS) $(CTFLAGS) $(ALLCSRCS) $(HDRS)
  321.  
  322. TAGS            :: $(ALLCSRCS) $(HDRS)
  323.     $(ETAGS) $(ALLCSRCS)
  324.  
  325. DISTFILES    ?=
  326.  
  327. dist            !
  328. #if defined(DISTDIR) && !empty(DISTDIR)
  329.     for i in Makefile local.mk $(TM).md/md.mk \
  330.         $(DISTFILES) $(SRCS) $(HDRS) $(SACREDOBJS)
  331.     do
  332.     if $(TEST) -e $${i}; then
  333.         $(UPDATE)  -l -n $${i} $(DISTDIR)/$${i} ;else true; fi
  334.     done
  335. #else
  336.     @echo "Sorry, no distribution directory defined"
  337. #endif
  338.  
  339. #include    <all.mk>
  340.  
  341. # For rdist, take the standard kernel makefile.
  342. # Allow the user to specify extra flags (like -v) for the rdist via
  343. # the DISTFLAGS variable.
  344.  
  345. DISTFILE     ?= /sprite/lib/misc/distfile.kernel
  346. DISTFLAGS    ?= 
  347.  
  348. Rdist        :: 
  349.     $(RDIST) $(DISTFLAGS) -f $(DISTFILE) -d DIR=`pwd`
  350.  
  351. .MAKEFLAGS    : -C        # No compatibility needed
  352.  
  353. update        ::
  354.     $(SCVS) update
  355.  
  356. SNAPFLAGS    ?= 
  357.  
  358. snapshot        ::
  359. #ifdef SNAPVERSION
  360.     if $(TEST) -f $(SNAPDIR)/$(SNAPVERSION)/$(NAME)/.ssdone; then
  361.         true
  362.     else
  363.         for i in $(ALLSRCS) $(ALLHDRS) 
  364.         do 
  365.      $(UPDATE) $(SNAPFLAGS) $${i} $(SNAPDIR)/$(SNAPVERSION)/$(NAME)/$${i} 
  366.         done
  367.         $(TOUCH) $(SNAPDIR)/$(SNAPVERSION)/$(NAME)/.ssdone
  368.     fi
  369. #else
  370.     @echo "You must specify a snapshot version number via SNAPVERSION
  371. #endif
  372.  
  373. listsrcs:
  374. #ifdef LISTFILE
  375.     @echo $(ALLSRCS) $(ALLHDRS) | tr ' ' '\012' >> $(LISTFILE)
  376. #else
  377.     @echo $(ALLSRCS) $(ALLHDRS)
  378. #endif
  379.  
  380.